import java.util.Scanner;

public class Test {
    //用异或来求解
    public static int[] findNumberAppearonce(int[] arr) {
        int result = 0;
        //将所有数字异或，得到两个不同数字的异或结果
        for (int i = 0; i < arr.length; i++) {
            result ^= arr[i];
        }
        //找到异或结果中第一个为1的位(这个位表示两个数字在该位不同)
        int index = 1;
        while ((index & result) == 0) {
            index <<= 1;
        }
        //创建一个数组存储两个不同数的值
        int[] bit = new int[2];
        for (int i = 0; i < arr.length; i++) {
            //根据第一个不同位将数组分为两组,将每组的数字异或分别得到两个不同数(因为有一组该位上都为0,和index异或后仍为0)
            if((index & arr[i]) == 0) {
                bit[0] ^= arr[i];
            } else {
                bit[1] ^= arr[i];
            }
        }
        return bit;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] arr = new int[]{2, 4, 3, 6, 3, 2, 5, 5};
//        for (int i = 0; i < findNumberAppearonce(arr).length; i++) {
//            System.out.println(findNumberAppearonce(arr)[i]);
//        }
        //上面的代码调用了两次方法，重复计算，用一个数组接受方法使代码更高效
        int[] result = findNumberAppearonce(arr);
        for (int i = 0; i < result.length; i++) {
            System.out.println(result[i]);
        }
    }
}
